package com.springboot.study.tests.leetcode;

/**
 * @Author: guodong
 * @Date: 2021/11/24 17:43
 * @Version: 1.0
 * @Description:
 */

import java.util.*;

/**
 * 题目描述：
 * 给定一个非空字符串，其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。
 *
 * 注意:
 *
 * 输入只包含小写英文字母。
 * 输入保证合法并可以转换为原始的数字，这意味着像 “abc” 或 “zerone” 的输入是不允许的。
 * 输入字符串的长度小于 50,000。
 * 示例 1:
 *
 * 输入: “owoztneoer”
 *
 * 输出: “012” (zeroonetwo)
 * 示例 2:
 *
 * 输入: “fviefuro”
 *
 * 输出: “45” (fourfive)
 * ————————————————
 * 版权声明：本文为CSDN博主「wenbaoxie」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/qq_34446716/article/details/102328117
 */
public class reconstruct_original_digits_from_english {


    public static String originalDigits(String s) {
        Map<Character,Integer> map = new HashMap<>();
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            map.put(chars[i],map.getOrDefault(chars[i],0) + 1);
        }
        // one  three  five  seven eight nine
        List<Integer> list = new ArrayList<>();
        if(map.containsKey('z')){
            int times = map.get('z');
            for (int i = 0; i < times; i++) {
                list.add(0);
            }
            map.put('e',map.get('e') - times);
            map.put('r',map.get('r') - times);
            map.put('o',map.get('o') - times);
        }
        if(map.containsKey('w')){
            int times = map.get('w');
            for (int i = 0; i < times; i++) {
                list.add(2);
            }
            map.put('t',map.get('t') - times);
            map.put('o',map.get('o') - times);
            map.put('w',0);
        }
        if(map.containsKey('u')){
            int times = map.get('u');
            for (int i = 0; i < times; i++) {
                list.add(4);
            }
            map.put('f',map.get('f') - times);
            map.put('o',map.get('o') - times);
            map.put('r',map.get('r') - times);
            map.put('u',0);
        }
        if(map.containsKey('x')){
            int times = map.get('x');
            for (int i = 0; i < times; i++) {
                list.add(6);
            }
            map.put('s',map.get('s') - times);
            map.put('i',map.get('i') - times);
            map.put('x',0);
        }
        if(map.containsKey('r')){
            int times = map.get('r');
            if(times != 0){
                for (int i = 0; i < times; i++) {
                    list.add(3);
                }
                map.put('t',map.get('t') - times);
                map.put('h',map.get('h') - times);
                map.put('e',map.get('e') - 2 * times);
                map.put('r',0);
            }
        }

        if(map.containsKey('o')){
            int times = map.get('o');
            if(times != 0){
                for (int i = 0; i < times; i++) {
                    list.add(1);
                }
                map.put('e',map.get('e') - times);
                map.put('n',map.get('n') - times);
                map.put('o',0);
            }
        }
        if(map.containsKey('s')){
            int times = map.get('s');
            if(times != 0){
                for (int i = 0; i < times; i++) {
                    list.add(7);
                }
                map.put('e',map.get('e') - 2 * times);
                map.put('n',map.get('n') - times);
                map.put('v',map.get('v') - times);
                map.put('s',0);
            }
        }

        if(map.containsKey('g')){
            int times = map.get('g');
            if(times != 0){
                for (int i = 0; i < times; i++) {
                    list.add(8);
                }
                map.put('e',map.get('e') - times);
                map.put('i',map.get('i') - times);
                map.put('h',map.get('h') - times);
                map.put('t',map.get('t') - times);
                map.put('g',0);
            }
        }
        if(map.containsKey('v')){
            int times = map.get('v');
            if(times > 0){
                for (int i = 0; i < times; i++) {
                    list.add(5);
                }
                map.put('e',map.get('e') - times);
                map.put('i',map.get('i') - times);
                map.put('f',map.get('f') - times);
                map.put('v',0);
            }
        }
        if(map.containsKey('e')){
            int times = map.get('e');
            for (int i = 0; i < times; i++) {
                list.add(9);
            }
        }
        Collections.sort(list);
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            stringBuilder.append(list.get(i));
        }
        return new String(stringBuilder);
    }


    public static void main(String[] args) {
        System.out.println(originalDigits("zeroonetwo"));
    }



}
